﻿using System;
using IcicleFramework.Entities;

namespace IcicleFramework.Components
{
    public interface IBaseComponent : IXmlBuildable, IUpdateable, IInitializable, IDisposable, IPauseable
    {
        /// <summary>
        /// Gets whether or not this IBaseComponent is Active.
        /// </summary>
        bool Active { get; set; }

        /// <summary>
        /// Gets or sets the Parent IGameObject that owns this IBaseComponent.
        /// </summary>
        IGameObject Parent { get; set; }

        /// <summary>
        /// Gets or sets the actual component Type (base interface) of this IBaseComponent.
        /// </summary>
        Type BaseType { get; set; }

        /// <summary>
        /// Provides a deep copy/clone of this component.
        /// </summary>
        /// <returns>A new instance of the component deep copied from this one.</returns>
        IBaseComponent DeepClone();
    }
}
